<?php
/*
 * OpenDocument Spreadsheet generator
 */
    class Kato_ContentODS {
      protected $str;

      public function get_content(){
                /*
                 * prepare local copy of stub
                 */
                $tmpfname = tempnam(sys_get_temp_dir(), "kato_ods_");
                $handle = fopen($tmpfname,"w");
                $origin = fopen('../library/Kato/stub.ods',"r");
                $contents = fread($origin, filesize('../library/Kato/stub.ods'));
                fwrite($handle,$contents);
                fclose($handle);
                fclose($origin);
                /*
                 * create ods file (stub + content)
                 */
                $zip = new ZipArchive;
                $res = $zip->open($tmpfname);
                if ($res === TRUE) {
                    $zip->addFromString('content.xml', $this->str);
                    $zip->close();
                }
                $handle = fopen($tmpfname,"r");
                $content = fread($handle, filesize($tmpfname));
                fclose($handle);
                unlink($tmpfname);
                return $content;
      }

      public function __construct($result){
    
$this->str = '<?xml version="1.0" encoding="utf-8"?>
<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0">
 <office:scripts />
 <office:font-face-decls>
  <style:font-face style:name="Arial" svg:font-family="Arial" style:font-family-generic="swiss" style:font-pitch="variable" />
  <style:font-face style:name="Tahoma" svg:font-family="Tahoma" style:font-family-generic="system" style:font-pitch="variable" />
 </office:font-face-decls>
 <office:automatic-styles>
  <style:style style:name="co1" style:family="table-column">
   <style:table-column-properties fo:break-before="auto" style:column-width="2.267cm" />
  </style:style>
  <style:style style:name="ro1" style:family="table-row">
   <style:table-row-properties style:row-height="0.427cm" fo:break-before="auto" style:use-optimal-row-height="true" />
  </style:style>
  <style:style style:name="ta1" style:family="table" style:master-page-name="Default">
   <style:table-properties table:display="true" style:writing-mode="lr-tb" />
  </style:style>
  <number:date-style style:name="N36">
   <number:day />
   <number:text>.</number:text>
   <number:month number:style="long" />
   <number:text>.</number:text>
   <number:year number:style="long" />
  </number:date-style>
  <number:currency-style style:name="N104P0" style:volatile="true">
   <number:number number:decimal-places="2" number:min-integer-digits="1" number:grouping="true" />
   <number:text></number:text>
   <number:currency-symbol number:language="pl" number:country="PL">zł</number:currency-symbol>
  </number:currency-style>
  <number:currency-style style:name="N104">
   <style:text-properties fo:color="#ff0000" />
   <number:text>-</number:text>
   <number:number number:decimal-places="2" number:min-integer-digits="1" number:grouping="true" />
   <number:text></number:text>
   <number:currency-symbol number:language="pl" number:country="PL">zł</number:currency-symbol>
   <style:map style:condition="value()&gt;=0" style:apply-style-name="N104P0" />
  </number:currency-style>
  <style:style style:name="ce1" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N36" />
  <style:style style:name="ce2" style:family="table-cell" style:parent-style-name="Heading" style:data-style-name="N104" />
  <style:style style:name="ce3" style:family="table-cell" style:parent-style-name="Default" style:data-style-name="N104" />
 </office:automatic-styles>
 <office:body>
  <office:spreadsheet>
   <table:table table:name="Arkusz1" table:style-name="ta1" table:print="false">
    <office:forms form:automatic-focus="false" form:apply-design-mode="false" />
    <table:table-column table:style-name="co1" table:number-columns-repeated="8" table:default-cell-style-name="Default" />
    <table:table-column table:style-name="co1" table:default-cell-style-name="ce3" />
    <table:table-column table:style-name="co1" table:number-columns-repeated="247" table:default-cell-style-name="Default" />
';
          
/*
 * column names in first row
 */
$this->str .= '
    <table:table-row table:style-name="ro1">
';
foreach ($result["columns"] as $column) {
    $this->str .= '
     <table:table-cell table:style-name="Heading" office:value-type="string">
      <text:p>'.$column["column"].'</text:p>
     </table:table-cell>';
    };
    
   $this->str .= '
     <table:table-cell table:style-name="Heading" table:number-columns-repeated="247" />
    </table:table-row>';
/*
 * column values
 */
          foreach ($result["rows"] as $row) {
              $this->str .= '<table:table-row table:style-name="ro1">';
              foreach ($row as $row_num => $value) {
                  switch ($result["columns"][$row_num]["type"]) {
                    case 'numeric':
                      $this->str .= '<table:table-cell office:value-type="float" office:value="';
                      $this->str .= htmlentities($value);
                      $this->str .= '"><text:p>';
                      $this->str .= '<![CDATA['.str_replace('.',',',$value).']]>';
                      $this->str .= '</text:p></table:table-cell>';
                      break;
                    case 'int4':
                      $this->str .= '<table:table-cell office:value-type="float" office:value="';
                      $this->str .= htmlentities($value);
                      $this->str .= '"><text:p>';
                      $this->str .= '<![CDATA['.str_replace('.',',',$value).']]>';
                      $this->str .= '</text:p></table:table-cell>';
                    break;
                    case 'timestamp':
                      $this->str .= '<table:table-cell table:style-name="ce1" office:value-type="date" office:date-value="';
                      $this->str .= htmlentities($value);
                      $this->str .= '"><text:p>';
                      $this->str .= '<![CDATA['.$value.']]>';
                      $this->str .= '</text:p></table:table-cell>';
                      break;
//                    case 'interval':
//                      break;
                    default:
                      $this->str .= '<table:table-cell office:value-type="string"><text:p>'."\n";
                      $this->str .= '<![CDATA['.$value.']]>';
                      $this->str .= '</text:p></table:table-cell>'."\n";
                  };  
              };
              $this->str .= '<table:table-cell table:number-columns-repeated="247" /></table:table-row>';
          }

/*
 * unused
     
     '<table:table-cell office:value-type="currency" office:currency="PLN" office:value="10.1">
      <text:p>10,10 z&#197;&#8218;</text:p>
     </table:table-cell>
 */

 $this->str .= '         
   </table:table>
  </office:spreadsheet>
 </office:body>
</office:document-content>';
      }
    };
      
      
    
